Capacity planning for computer systems has typically been approached as a way to determine the amount of each resource that is required by a computer system (e.g., server) to meet an expected demand. The capacity planning process typically forecasts expected future demand, associates service level requirements with that demand, and then determines the expected quantity and configuration of resources that will ensure acceptable application performance and availability. As an example of capacity planning, a business hosting a web application may determine the appropriate quantity and configuration of computing resources to support the web application.
To capacity plan, existing techniques may build predictive models of response time and/or throughput. However, response time and throughput may be non-linear with respect to resource utilization and are often highly unpredictable. Therefore, use of these techniques may lead to the wrong amount and/or configuration of resources.
Incorrect capacity planning may result in over-provisioning, which increases total cost, or under-provisioning, which degrades application behavior, negatively impacts revenue, and causes poor user satisfaction.
Furthermore, existing capacity planning techniques are typically limited to analysis of hardware resources, and do not consider software resources. Software resources, which can reside at different levels of the computing stack, can be just as limiting as hardware resources.
Moreover, existing capacity planning techniques have little awareness of the complexity and inter-dependencies of composite or transactional applications, where a capacity fault in one component can affect a component that depends on it.